// edit-profile.js
import { getUserInfo as getLocalUserInfo, processOssUrl, updateUserInfo } from '../../../utils/http';
import { userApi } from '../../../services/api';

Page({
  data: {
    userName: '',
    avatarUrl: '',
    originalUserName: '',
    originalAvatarUrl: '',
    hasChanges: false,
    isSelectingAvatar: false  // 添加标记，表示是否正在选择头像
  },
  
  onLoad() {
    // 获取本地存储的用户信息
    this.loadUserDataFromCache();
  },
  
  onShow() {
    // 只有在不是选择头像状态时才重新加载缓存数据
    if (!this.data.isSelectingAvatar) {
      this.loadUserDataFromCache();
    }
  },
  
  // 从缓存加载用户数据
  loadUserDataFromCache() {
    // 如果正在选择头像，不加载缓存数据
    if (this.data.isSelectingAvatar) {
      return;
    }
    
    const userInfo = getLocalUserInfo();
    if (userInfo) {
      let avatarUrl = '';
      
      // 优先使用avatarUrl，其次是headImg
      if (userInfo.avatarUrl) {
        avatarUrl = processOssUrl(userInfo.avatarUrl);
      } else if (userInfo.headImg) {
        avatarUrl = processOssUrl(userInfo.headImg);
      }
      
      this.setData({
        userName: userInfo.userName || '',
        avatarUrl: avatarUrl,
        originalUserName: userInfo.userName || '',
        originalAvatarUrl: avatarUrl
      });
      
      console.log('从缓存加载用户数据:', {
        userName: userInfo.userName,
        avatarUrl: avatarUrl
      });
    }
  },
  
  // 返回上一页
  navigateBack() {
    if (this.data.hasChanges) {
      wx.showModal({
        title: '提示',
        content: '您有未保存的修改，确定要离开吗？',
        success: (res) => {
          if (res.confirm) {
            wx.navigateBack();
          }
        }
      });
    } else {
      wx.navigateBack();
    }
  },
  
  // 监听用户名输入
  onUserNameInput(e) {
    const newUserName = e.detail.value;
    this.setData({
      userName: newUserName,
      hasChanges: newUserName !== this.data.originalUserName || this.data.avatarUrl !== this.data.originalAvatarUrl
    });
  },
  
  // 选择头像
  chooseAvatar() {
    console.log('开始选择头像');
    // 设置正在选择头像的标记
    this.setData({
      isSelectingAvatar: true
    });
    
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
      sizeType: ['compressed'],
      success: (res) => {
        console.log('选择头像成功', res);
        if (res.tempFiles && res.tempFiles.length > 0) {
          const tempFile = res.tempFiles[0];
          console.log('获取到的临时文件信息', tempFile);
          
          // 检查文件大小（限制为5MB）
          const maxSize = 5 * 1024 * 1024; // 5MB
          if (tempFile.size > maxSize) {
            wx.showToast({
              title: '图片大小不能超过5MB',
              icon: 'none'
            });
            // 重置选择头像标记
            this.setData({
              isSelectingAvatar: false
            });
            return;
          }
          
          this.setData({
            avatarUrl: tempFile.tempFilePath,
            hasChanges: tempFile.tempFilePath !== this.data.originalAvatarUrl || this.data.userName !== this.data.originalUserName
          }, () => {
            console.log('更新后的avatarUrl:', this.data.avatarUrl);
            console.log('hasChanges:', this.data.hasChanges);
            // 重置选择头像标记
            this.setData({
              isSelectingAvatar: false
            });
          });
        } else {
          console.error('未获取到临时文件');
          wx.showToast({
            title: '选择头像失败',
            icon: 'none'
          });
          // 重置选择头像标记
          this.setData({
            isSelectingAvatar: false
          });
        }
      },
      fail: (err) => {
        console.error('选择头像失败', err);
        wx.showToast({
          title: '选择头像失败: ' + (err.errMsg || '未知错误'),
          icon: 'none'
        });
        // 重置选择头像标记
        this.setData({
          isSelectingAvatar: false
        });
      },
      complete: () => {
        console.log('选择头像操作完成');
      }
    });
  },
  
  // 保存用户信息
  saveUserInfo() {
    if (!this.data.userName) {
      wx.showToast({
        title: '用户名不能为空',
        icon: 'none'
      });
      return;
    }
    
    wx.showLoading({
      title: '保存中...',
      mask: true
    });
    
    // 先上传头像（如果有更改）
    const uploadAvatar = () => {
      // 检查头像是否有变化
      if (this.data.avatarUrl !== this.data.originalAvatarUrl) {
        // 本地文件路径通常以 wxfile:// 或 http://tmp 开头
        const isLocalFile = this.data.avatarUrl.startsWith('wxfile://') || 
                           this.data.avatarUrl.startsWith('http://tmp') || 
                           this.data.avatarUrl.indexOf('tmp_') !== -1;
        
        if (isLocalFile) {
          console.log('准备上传本地头像文件', this.data.avatarUrl);
          
          // 检查文件是否存在
          try {
            const fs = wx.getFileSystemManager();
            fs.accessSync(this.data.avatarUrl);
          } catch (err) {
            console.error('文件不存在或无法访问:', err);
            wx.showToast({
              title: '头像文件不存在或无法访问',
              icon: 'none'
            });
            return Promise.reject(new Error('文件不存在或无法访问'));
          }
          
          // 获取文件信息
          return new Promise((resolve, reject) => {
            const fs = wx.getFileSystemManager();
            fs.getFileInfo({
              filePath: this.data.avatarUrl,
              success: (res) => {
                // 检查文件大小（限制为5MB）
                const maxSize = 5 * 1024 * 1024; // 5MB
                if (res.size > maxSize) {
                  wx.showToast({
                    title: '图片大小不能超过5MB',
                    icon: 'none'
                  });
                  reject(new Error('文件大小超过限制'));
                  return;
                }
                
                // 处理本地文件上传
                userApi.uploadAvatar(this.data.avatarUrl)
                  .then(res => {
                    console.log('头像上传响应', res);
                    if (res.status === 200 && res.data) {
                      let fileUrl = '';
                      // 尝试不同的属性名称获取文件URL
                      if (res.data.filePath) {
                        fileUrl = res.data.filePath;
                      } else if (res.data.fileUrl) {
                        fileUrl = res.data.fileUrl;
                      } else if (res.data.fileName) {
                        fileUrl = res.data.fileName;
                      } else if (typeof res.data === 'string' && res.data.includes('http')) {
                        // 尝试从字符串中提取URL
                        const urlMatch = res.data.match(/(https?:\/\/[^"'\s]+)/);
                        if (urlMatch && urlMatch[1]) {
                          fileUrl = urlMatch[1];
                        }
                      }
                      
                      if (fileUrl) {
                        // 处理OSS URL
                        fileUrl = processOssUrl(fileUrl);
                        console.log('处理后的文件URL', fileUrl);
                        resolve(fileUrl);
                      } else {
                        wx.showToast({
                          title: '头像上传成功但获取URL失败',
                          icon: 'none'
                        });
                        resolve(this.data.originalAvatarUrl);
                      }
                    } else {
                      wx.showToast({
                        title: '头像上传失败',
                        icon: 'none'
                      });
                      resolve(this.data.originalAvatarUrl);
                    }
                  })
                  .catch(err => {
                    console.error('头像上传失败', err);
                    wx.showToast({
                      title: '头像上传失败，请重试',
                      icon: 'none'
                    });
                    resolve(this.data.originalAvatarUrl);
                  });
              },
              fail: (err) => {
                console.error('获取文件信息失败:', err);
                wx.showToast({
                  title: '获取文件信息失败',
                  icon: 'none'
                });
                reject(err);
              }
            });
          });
        }
      }
      
      // 如果没有更改或不是本地文件，直接返回当前头像URL
      return Promise.resolve(this.data.avatarUrl || this.data.originalAvatarUrl);
    };
    
    // 上传头像后更新用户信息
    uploadAvatar()
      .then(avatarUrl => {
        const userData = {
          userName: this.data.userName,
          avatarUrl: avatarUrl
        };
        
        return userApi.updateUserInfo(userData);
      })
      .then(res => {
        if (res.status === 200) {
          // 更新本地缓存中的用户信息
          const updatedInfo = updateUserInfo({
            userName: this.data.userName,
            avatarUrl: this.data.avatarUrl
          });
          
          wx.showToast({
            title: '保存成功',
            icon: 'success'
          });
          
          // 更新原始数据，重置hasChanges
          this.setData({
            originalUserName: this.data.userName,
            originalAvatarUrl: this.data.avatarUrl,
            hasChanges: false
          });
          
          console.log('用户信息已更新并缓存', updatedInfo);
          
          // 延迟返回
          setTimeout(() => {
            wx.navigateBack();
          }, 1500);
        } else {
          wx.showToast({
            title: '保存失败',
            icon: 'none'
          });
        }
      })
      .catch(err => {
        console.error('更新用户信息失败', err);
        wx.showToast({
          title: '保存失败，请重试',
          icon: 'none'
        });
      })
      .finally(() => {
        wx.hideLoading();
      });
  }
}) 